package com.gmrz.webauthn.db.dao;

import com.gmrz.uaf.db.DAOException;
import com.gmrz.webauthn.protocol.v1.schema.WebAuthenticator;

import java.util.List;

public interface WebAuthnAuthenticatorsDAO {
    /**
     * 插入WEBAUTHN认证信息
     *
     * @param webAuthenticator 认证信息
     * @throws DAOException
     */
    void insert(WebAuthenticator webAuthenticator) throws DAOException;

    /**
     *
     */
    List<WebAuthenticator> find(String tenantId, String hashUserName,String authType,String transType,String deviceID) throws DAOException;

    /**
     * 根据渠道名称与证书ID获取认证信息
     *
     * @param rawId    证书ID
     * @param tenantId 渠道名称
     * @return WebAuthenticator 认证信息
     * @throws DAOException
     */
    WebAuthenticator findByRawIdAndTenantId(String rawId, String tenantId) throws DAOException;

    /**
     * 根据渠道名称、用户名、证书ID修改认证次数
     *
     * @param username     用户名
     * @param credentialId 证书ID
     * @param tenantId     渠道名称
     * @param signCounter  验签次数
     * @return BOOLEAN 是否修改成功
     * @throws DAOException
     */
    boolean updateAuthCounter(String username, String credentialId, String tenantId, long signCounter) throws DAOException;


    /**
     * 根据用户名、证书ID、渠道名称更改验证计数
     *
     * @param signCounter  验签计数
     * @param username     用户名
     * @param credentialId 证书ID
     * @param tenantId     渠道名称
     * @return BOOLEAN 修改是否成功
     * @throws DAOException
     */
    boolean updateSignCounter(long signCounter, String username, String credentialId, String tenantId) throws DAOException;
    boolean delete(String appID,String hashedUsername, String keyID) throws DAOException;

}
